package com.desginer.struct.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * 为其他对象提供一种代理以控制对这个对象的访问。
 *
 * ​​场景​​	​​代理类型​​	​​关键需求​​
 * 跨网络调用服务	远程代理	隐藏网络细节，简化客户端调用
 * 大资源延迟加载	虚拟代理	提升性能，按需加载
 * 敏感操作权限控制	保护代理	动态校验访问权限
 * 方法调用监控/日志	智能引用代理	非侵入式增强功能
 * 高频查询结果缓存	缓存代理	减少重复计算，加速响应
 *
 *
 * 场景​​	​​代理类型​​	​​关键需求​​
 * 跨网络调用服务	远程代理	隐藏网络细节，简化客户端调用
 * 大资源延迟加载	虚拟代理	提升性能，按需加载
 * 敏感操作权限控制	保护代理	动态校验访问权限
 * 方法调用监控/日志	智能引用代理	非侵入式增强功能
 * 高频查询结果缓存	缓存代理	减少重复计算，加速响应
 *
 */
public class ProxyTest {

    public static void main(String[] args) {
        UserService realService = new UserServiceImpl();
        UserService proxy = (UserService) Proxy.newProxyInstance(
                realService.getClass().getClassLoader(),
                realService.getClass().getInterfaces(),
                new UserServiceProxy(realService)
        );
        proxy.deleteUser(100); // 通过代理调用
    }
}
